/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vetxsoft.bean;

import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import vetxsoft.entity.Cliente;
import vetxsoft.entity.Desparacitacion;
import vetxsoft.entity.DetalleDesparasitacion;
import vetxsoft.entity.DetalleDesparasitacionPK;
import vetxsoft.entity.HistoriaClinica;
import vetxsoft.entity.Mascota;
import vetxsoft.system.IVetexsoftSystem;

/**
 *
 * @author Nother
 */
@ManagedBean
@SessionScoped
public class desparacitacionBean {

    @EJB
    private IVetexsoftSystem vetexsoftSystem;
    private Desparacitacion desparacitacion = new Desparacitacion();
    private DetalleDesparasitacion detalleDesparacitacion = new DetalleDesparasitacion();
    private LinkedList<DetalleDesparasitacion> detalleDesparacitacions = new LinkedList<DetalleDesparasitacion>();
    private HistoriaClinica historiaClinica = new HistoriaClinica();
    private Mascota mascota = new Mascota();
    private Cliente cliente;
    private Date currentDate = new Date();
    private boolean stored = false;

    public Desparacitacion getDesparacitacion() {
        return desparacitacion;
    }

    public Date getCurrentDate() {
        return currentDate;
    }

    public void setDesparacitacion(Desparacitacion desparacitacion) {
        this.desparacitacion = desparacitacion;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public boolean isStored() {
        return stored;
    }

    public void setStored(boolean stored) {
        this.stored = stored;
    }

    public void cancelSelectionCliente() {

        this.cliente = (null);
    }

    public DetalleDesparasitacion getDetalleDesparacitacion() {
        return detalleDesparacitacion;
    }

    public Mascota getMascota() {
        return mascota;
    }

    public void setMascota(Mascota mascota) {
        this.mascota = mascota;
    }

    public HistoriaClinica getHistoriaClinica() {
        return historiaClinica;
    }


    
    public void setDetalleDesparacitacion(DetalleDesparasitacion detalleDesparacitacion) {
        this.detalleDesparacitacion = detalleDesparacitacion;
    }

    public LinkedList<DetalleDesparasitacion> getDetalleDesparacitacions() {
        return detalleDesparacitacions;
    }

    public void setDetalleDesparacitacions(LinkedList<DetalleDesparasitacion> detalleDesparacitacions) {
        this.detalleDesparacitacions = detalleDesparacitacions;
    }

    
    public void cancelSelectionProducto() {

        this.detalleDesparacitacion.setProducto(null);
    }

    public void addDetalleAction() {

        if (this.detalleDesparacitacion.getCantidad() <= 0) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "La cantidad no puede ser menor o igual a cero.", ""));
            return;
        }

        if (this.detalleDesparacitacion.getProducto() == null) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Debes seleccionar un desparacitador.", ""));
            return;
        }


        for (DetalleDesparasitacion dd : this.detalleDesparacitacions) {
            if (dd.getProducto().getDescripcion().equalsIgnoreCase(this.detalleDesparacitacion.getProducto().getDescripcion())) {

                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Esta vacuna ya ha sido ingresada. Debes seleccionar otra.", ""));
                return;
            }
        }

        this.detalleDesparacitacions.add(detalleDesparacitacion);

        this.detalleDesparacitacion = new DetalleDesparasitacion();

    }

    public void returnDetalle() {

        this.detalleDesparacitacions.remove(detalleDesparacitacion);
        this.detalleDesparacitacion = new DetalleDesparasitacion();
    }
    
        public void saveAction() {
        try {

            if (this.detalleDesparacitacions.isEmpty()) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Debes seleccionar un producto.", ""));
                return;
            }

            // guardamos la desparacitacion
            this.desparacitacion.setCodMascota(mascota.getCodigo());
            this.desparacitacion.setStored(this.stored);
            this.vetexsoftSystem.saveDesparasitacion(this.desparacitacion);

            // obtenemos la ultima desparasitacion guardada, la cual nos proporcionará el codigo generado automaticamente
            List<Desparacitacion> facturas = this.vetexsoftSystem.obtenerDesparacitacion();
            this.desparacitacion = facturas.get(facturas.size() - 1);

            // guardamos la historia clinica
//            this.vetexsoftSystem.saveHistoriaClinica(this.historiaClinica);
            
            // guardamos todos los detalles de desparasitacion registrados
            for (DetalleDesparasitacion dd : this.detalleDesparacitacions) {

                dd.setDetalleDesparasitacionPK(new DetalleDesparasitacionPK(this.desparacitacion.getCodigo(), dd.getProducto().getCodigo()));
                this.vetexsoftSystem.saveDetalleDesparasitacion(dd);
            }

            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "La desparasitación ha sido registrada satisfactoriamente.", ""));

            this.desparacitacion = new Desparacitacion();
            this.detalleDesparacitacion = new DetalleDesparasitacion();
            this.detalleDesparacitacions = new LinkedList<DetalleDesparasitacion>();
            this.cliente = null;
            this.historiaClinica = new HistoriaClinica();
            this.stored = false;

        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido registrar la desparasitación. Por favor, vuelva a intentarlo.", ""));
        }
    }
            public void cancelAction() {

        this.desparacitacion = new Desparacitacion();
        this.detalleDesparacitacion = new DetalleDesparasitacion();
        this.detalleDesparacitacions = new LinkedList<DetalleDesparasitacion>();
        this.cliente = null;
        this.historiaClinica = new HistoriaClinica();
        this.stored = false;
    }
}
